\mychapter{Desenvolvimento}
\label{cap:des}

Neste capitulo abordaremos todos a metodologia que foi utilizada para o desenvolvimento do projeto, desde equipamentos físicos como CLPs e circuitos até os \textit{softwares}.

\section{CLP Zap 900}

\Glossary{PLC}{\textit{Programmable Logic Controller}}

Um Controlador Lógico Programável, conhecido também por sua sigla CLP e pela sigla de expressão inglesa PLC (\textit{Programmable Logic Controller}), é um computador especializado, baseado num microprocessador que desempenha funções de controle em diversos níveis de complexidade. Geralmente as famílias de Controladores Lógicos Programáveis são definidas pela capacidade de processamento de um determinado numero de pontos de Entradas e/ou Saídas (E/S). Os CLPs são indicados para lidar com sistemas caracterizados por eventos discretos, ou seja, com processos em que suas variáveis assumem valores zero ou um e ainda podem ainda lidar com variáveis analógicas definidas por intervalos de valores de corrente ou tensão elétrica. As entradas e/ou saídas digitais são os elementos discretos, as entradas e/ou saídas analógicas são os elementos variáveis entre valores conhecidos de tensão ou corrente.

Para realizar este projeto, utilizamos o  CLP modelo Zap 900 da Hi Tecnologia com o módulo de expansão HXM500. Este CLP  foi concebido para atender aplicações de pequeno porte (aproximadamente 40 pontos de I/O), porém, com recursos de software encontrados em CLPs de grande porte e custo muito superior. O módulo de expansão HXM500 foi necessário pois  o CLP não apresenta entradas e saídas analógicas em sua configuração original.


\begin{figure}[htb]
	\centering
	\includegraphics[scale=1]{imgs/des/clp}
	\caption{Fotografia do CLP ZAP 900}
	\label{fig:clp}
\end{figure}

Este equipamento vem com 2 canais de comunicação serial e o servidor OPC é fornecido gratuitamente pela HI Tecnologia. Este servidor é executado em um computador e faz a ponte entre a serial do CLP e o protocolo OPC.

A programação do CLP foi feita utilizando  Ladder. Esta é uma linguagem gráfica em que as funções lógicas são representadas através de contatos e bobinas, fazendo analogia a um esquema elétrico de relés. Além disto, existem blocos funcionais que permitem realizar operações mais complexas que a leitura ou escrita de variáveis. São exemplos de blocos funcionais os contadores, temporizadores, bobinas de set ou reset,blocos de controladores PID e blocos para operações matemáticas.

\begin{figure}[htb]
	\centering
	\includegraphics[scale=0.7]{imgs/des/ladder}
	\caption{Exemplo de uma linha de ladder com um bloco PID}
	\label{fig:ladder}
\end{figure}

\section{Filtro Passa-Baixa de Butterworth}

\Glossary{$W_{c}$}{freqüência  de Corte}

O ruído de alta freqüência  presente nos sinais dos sensores podem causar grandes variações nos sinais de controle e prejudicar os atuadores. Para minimizar o problema, resolvemos filtrar os sinais lidos pelas entradas analógicas do CLP. O filtro de Butterworth foi escolhido pois sua resposta em freqüência é muito suave (não possui \textit{ripple}, ou ondulações) na banda passante, e se aproxima do zero na banda rejeitada \cite{oppenheim} e \cite{bonnie}.

A função de transferência para um filtro Butterworth de segunda ordem com $W_{c} = 1$ (frequência de corte) e ganho unitário é:

\begin{equation}
H(s) = \frac{1}{s^2 + 1.4142s + 1}
\end{equation}

\Glossary{ZOH}{\textit{Zero Order Holder}}

Discretizando a função de transferência para um período do amostragem $T=0.1$ (usado em todas as ocasiões no trabalho) pelo método de ZOH (Segurador de ordem zero ou \textit{Zero Order Holder}) temos:

\begin{equation}
H(z) = \frac{0.004768z + 0.004549}{z^2 - 1.859z + 05651}\
\end{equation}

Passando para o domínio discreto, temos a equação a diferença:


\begin{equation}
y(k) = 1.859y(k-1) - 0.8681y(k - 2) + 0.004768u(k - 1) + 0.004549(u(k-2)
\end{equation}


Esta equação a diferença foi implementada diretamente no ladder do CLP e um \textit{TIMER} foi utilizado para garantir o período de amostragem de $T=0.1s$. A figura \ref{fig:resp_filtro} mostra a resposta em freqüência do filtro de Butterworth implementado, enquanto a figura \ref{fig:sinal_filtro} mostra um sinal de teste antes e após a filtragem.

\begin{figure}[htb]
	\centering
	\includegraphics[scale=0.32]{imgs/des/resp_filtro}
	\caption{Resposta no domínio S do filtro de Butterworth}
	\label{fig:resp_filtro}
\end{figure}


\begin{figure}[H]
\begin{minipage}{5.8cm}
\begin{tabular}{c}
\includegraphics[height=4.8cm]{imgs/des/sinal_y} \\
(a)
\end{tabular}
\end{minipage}
\begin{minipage}{4.8cm}
\begin{tabular}{c}
\includegraphics[height=4.8cm]{imgs/des/sinal_fy}\\
(b)
\end{tabular}
\end{minipage}
\caption{(a) Sinal Oriundo do sensor (b) Sinal Filtrado}
\label{fig:sinal_filtro}
\end{figure} 

\Glossary{DC}{\textit{Direct Current}}

Notamos que o inicialmente sinal filtrado é um pouco atrasado ao sinal original, convergindo com o tempo para o seu nível DC. Isto não é um problema para o controle uma vez que este erro é pequeno e muitas vezes bem menor que o erro apresentado pelo sensor.


\section{Planta Utilizada e a Simulação}

A planta utilizada para os teste foi um sistema de tanques acoplados da Quanser usados para o controle de nível. Nesta planta existem dois tanques acoplados cuja vazão de saída do tanque 1 é a vazão de entrada do tanque 2 e o elemento atuador(bomba) só interfere diretamente na vazão de entrada do tanque 1. Na configuração utilizada nos teste o diâmetro de saídade ambos os tanques são iguais. O sistema de controle consiste em controlar o nível do tanque 2 atuando  apenas sobre a entrada do tanque 1.

\begin{figure}[htb]
	\centering
	\includegraphics[scale=0.7]{imgs/des/com_sim}
	\caption{Esquema de comunicação para simulação e com a planta real}
	\label{fig:tan}
\end{figure}

As equações diferenciais não lineares que regem o sistema são:

\begin{equation}
\dot{L_1} =  \frac{K_{m}}{A_{1}}V_{p} -\frac{a_1}{A_1}\sqrt{2gL_{1}}
\label{eq:model1}
\end{equation}
\begin{equation}
\dot{L_2} = \frac{a_1}{A_2}\sqrt{2gL_{1}} - \frac{a_1}{A_2}\sqrt{2gL_{2}}
\end{equation}

Onde $a_x$ é o raio do orifício de saída, $A_x$ é a área da seção transversal, $g$ é a gravidade, $L_X$ é o nível dos tanques, $V_s$ é a tensão nominal aplicada a bomba e $K_m$ é a constante da bomba. Note que a parte positiva das equações representa a entrada no tanque e as negativas a saída e que a saída do tanque 1 é igual a entrada do tanque 2 se $A_1 = A_2$, que é o caso. A figura \ref{fig:model} representa a implementacao da equação \ref{eq:model1} no simulink do MatLab.

\begin{figure}[htb]
	\centering
	\includegraphics[scale=1]{imgs/des/model}
	\caption{Representação da equação \ref{eq:model1} no Simulink com adição de um ruído}
	\label{fig:model}
\end{figure}


Inicialmente, implementamos as equações diferenciais da planta no \textit{simulink toolkit} do matlab e utilizando o \textit{OPC toolbox} para fazer a comunicação OPC com o CLP. A cada passo da simulação, o matlab ler via OPC a memória que contém o Sinal de controle gerado pelo PID do CLP(caso ele esteja em automático), faz os cálculos da simulação (obtém a resposta da planta) e atualiza as memórias que seriam as memórias das entradas analógicasfazendo com que o CLP controle o processo simulado da mesma forma que controla o processo real. Isto torna totalmente transparente para o \textit{software} desenvolvido se estamos lidando ou não com uma simulação.


\section{Circuito de interface da Saída Analógica}

O módulo de expansão HXM500 apenas tem a opção de saída analógica em corrente. A entrada dos atuadores da planta de teste (tanques acoplados da Quanser) é em voltagem de $-3V$ à $3V$. Por isto, para conseguir fazer o ZAP 900 controlar a planta, tivemos que montar um circuito que receba uma entrada de $4mA$ à $20mA$ e gere como saída um sinal de $-3V$ à $3V$. A figura \ref{fig:circ} mostra o desenho esquemático deste circuito.

\begin{figure}[htb]
	\centering
	\includegraphics[scale=0.8]{imgs/des/circ}
	\caption{Circuito de interface da Saída Analógica}
	\label{fig:circ}
\end{figure}

O tratamento do sinal basicamente é feito em 3 etapas. Primeiramente trasformamos o sinal de $4$ - $20 mA$ em um sinal de $1$ - $5V$. Posteriormente multiplicamos este sinal por 1,5(amp-op U1:B) e ficamos com um sinal de $-1,5$ - $-7,5V$, então finalmente somamos $4,5V$ (amp-op U1:A) gerando o sinal desejado. Note que os amp-ops U1:D e U1:C são apenas \textit{buffers} nescessários para isolar as etapas do circuito(alta impedância de entrada / baixa impedância de saída).

A alimentação é feita usando a propria fonte de $-12V$ à $12V$ disponivel no módulo de potência da Quanser. Já os sinais dos sensores não tiveram de ter nenhum tratamento especial, pois a HXM500 tem a opção de entrada analógica em tensão.


\section{Ambiente de desenvolvimento e \textit{Software}}

O \textit{Software} foi desenvolvido em C++ e QT para o sistema operacional \textit{Microsoft Windows}. A linguagem C++ foi escolhida pois a performance é um requisito desta aplicação uma vez que são realizamos cálculos em tempo real com intervalo de amostragem de 0.1 segundos. As principais telas do sistema são:

\begin{enumerate}
\item Tela de Supervisão em que são plotada todas as informações como \textit{SetPoint}, PV e MV, além de disponibilizar uma interface para mudar a sintonia do controlador PID do CLP. Todas as outras funções do \textit{software} dependem da inicialização desta tela no botão "Iniciar/Parar". (Figura \ref{fig:tela2})
\item Tela de Configuração da comunicação OPC do \textit{software} com o CLP. Nela é apresentado uma lista de servidores OPC disponíveis localmente. Uma vez conectado a um servidor, o usuário deverá fazer a relação entre cada variável na memoria do CLP(tags OPC) e sua respectiva função no programa. (Figura \ref{fig:tela1})
\item Tela de Sintonia automática de malhas PID desenvolvida pelo trabalho \cite{daniel}. Esta tela implementa métodos de sintonia de malhas PID como Ziegler-Nichols, Cohen-Coon ou Takahashi.
\item Tela de Avaliação e Análise de desempenho de malhas de controle. Esta é a tela foco deste trabalho e será mais detalhada a seguir. (Figura \ref{fig:tela3})
\item Tela de Histórico de Avaliações em que são apresentados os valores dos índices calculados nas últimas avaliações realizadas. (Figura \ref{fig:tela4})
\end{enumerate}

\begin{figure}[H]
\centering
\includegraphics[scale=0.6]{imgs/des/configOPC}
\caption{Tela de Configuração OPC}
\label{fig:tela1}
\end{figure}

\begin{figure}[H]
\centering
\includegraphics[scale=0.5]{imgs/des/telaSuper}
\caption{Tela de Supervisão}
\label{fig:tela2}
\end{figure}

\begin{figure}[H]
\centering
\includegraphics[scale=1]{imgs/des/TelaAPiloto}
\caption{Tela de Avaliação e Análise de desempenho de malhas de controle}
\label{fig:tela3}
\end{figure}

\begin{figure}[H]
\centering
\includegraphics[scale=0.5]{imgs/des/telaHist}
\caption{Tela de Histórico de Avaliações}
\label{fig:tela4}
\end{figure}



A figura \ref{fig:tela3} mostra a tela do módulo de avaliação do sistema. Nela é apresentado um gráfico com o resultado dos índices calculados na ultima avaliacão além da legenda e dos parametros de configuracao definidos a seguir:


\begin{enumerate}
\item Tempo - Intervalo de Duração de cada avaliação
\item Freqüência - Intervalo de tempo entre as avaliações no caso de avaliação automática.
\item Intrusão - Nível de intrusão da avaliação medida em porcentagem do \textit{SetPoint} (degrau aplicado ao sistema na avaliação)
\item Tolerância - Nível tolerável de diferença entre os índices recém calculados e os índices da avaliação piloto no caso de avaliação automática. Caso esta diferença seja maior que a tolerância é gerado um alarme que indica problemas na malha de controle.
\end{enumerate}
 

Podemos dividir o \textit{software} internamente em 4 principais módulos. O modulo de comunicação OPC, como o proprio nome diz, é o responsavel por implementar o protocolo OPC. É interessante ressaltar que este modulo é o unico que é dependente do sistema operacional \textit{windows}, uma vez que faz uso de blibliotecas nativas. Já o modulo "GUI", além de disponibilizar graficamente os dados para o usuário é o responsavel por fazer as requisicoes de dados para o modulo de comunicação e repassá-los  para os modulos de calculo e sintonia. Este ciclo(requisição, repasse para os modulos de calculo e atualização da interface grafica) é repetido a cada $0.1s$ que corresponde ao tempo de amostragem do sistema e é o principal motivo da escolha de uma linguagem rápida na implementação. A figura \ref{fig:org} mostra esquematicamente a organização interna do \textit{software} desenvolvido.

\begin{figure}[H]
\centering
\includegraphics[scale=1]{imgs/des/com}
\caption{Organização do \textit{software}}
\label{fig:org}
\end{figure}
%A comunicação OPC foi feita ultilizando as bibliotecas nativas do sistema \textit{Microsoft Windows}.


Podemos dividir o \textit{software} internamente em 4 principais módulos. O módulo de comunicação OPC, como o próprio nome diz, é o responsável por implementar o protocolo OPC. É interessante ressaltar que este módulo é o único que é dependente do sistema operacional \textit{windows}, uma vez que faz uso de bibliotecas nativas. Já o módulo "GUI", além de disponibilizar graficamente os dados para o usuário é o responsável por fazer as requisições de dados para o módulo de comunicação e repassá-los  para os módulos de calculo e sintonia. Este ciclo(requisição, repasse para os módulos de calculo e atualização da interface gráfica) é repetido a cada $0.1s$ que corresponde ao tempo de amostragem do sistema e é o principal motivo da escolha de uma linguagem rápida na implementação. A figura \ref{fig:org} mostra esquematicamente a organização interna do \textit{software} desenvolvido.







